﻿using Contracts;
using System;

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName = "ICalculator", CallbackContract = typeof(IPushCallback))]
public interface ICalculator
{
    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/ICalculator/Add", ReplyAction = "http://tempuri.org/ICalculator/AddResponse")]
    string Add(string js);

    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/ICalculator/Add", ReplyAction = "http://tempuri.org/ICalculator/AddResponse")]
    System.Threading.Tasks.Task<string> AddAsync(string js);

    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/ICalculator/Subtract", ReplyAction = "http://tempuri.org/ICalculator/SubtractResponse")]
    double Subtract(double x, double y);

    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/ICalculator/Subtract", ReplyAction = "http://tempuri.org/ICalculator/SubtractResponse")]
    System.Threading.Tasks.Task<double> SubtractAsync(double x, double y);

    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/ICalculator/Multiply", ReplyAction = "http://tempuri.org/ICalculator/MultiplyResponse")]
    double Multiply(double x, double y);

    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/ICalculator/Multiply", ReplyAction = "http://tempuri.org/ICalculator/MultiplyResponse")]
    System.Threading.Tasks.Task<double> MultiplyAsync(double x, double y);

    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/ICalculator/Divide", ReplyAction = "http://tempuri.org/ICalculator/DivideResponse")]
    double Divide(double x, double y);

    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/ICalculator/Divide", ReplyAction = "http://tempuri.org/ICalculator/DivideResponse")]
    System.Threading.Tasks.Task<double> DivideAsync(double x, double y);

    [System.ServiceModel.OperationContractAttribute(IsOneWay = true, Action = "http://tempuri.org/ICalculator/UnRegist")]
    void UnRegist();
}

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public interface ICalculatorChannel : ICalculator, System.ServiceModel.IClientChannel
{
}

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class ICalculatorClient : System.ServiceModel.DuplexClientBase<ICalculator>, ICalculator
{
    public ICalculatorClient(System.ServiceModel.InstanceContext callbackInstance) :
            base(callbackInstance)
    {
    }

    public ICalculatorClient(System.ServiceModel.InstanceContext callbackInstance, string endpointConfigurationName) :
            base(callbackInstance, endpointConfigurationName)
    {
    }

    public ICalculatorClient(System.ServiceModel.InstanceContext callbackInstance, string endpointConfigurationName, string remoteAddress) :
            base(callbackInstance, endpointConfigurationName, remoteAddress)
    {
    }

    public ICalculatorClient(System.ServiceModel.InstanceContext callbackInstance, string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
            base(callbackInstance, endpointConfigurationName, remoteAddress)
    {
    }

    public ICalculatorClient(System.ServiceModel.InstanceContext callbackInstance, System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
            base(callbackInstance, binding, remoteAddress)
    {
    }

    public string Add(string js)
    {
        return base.Channel.Add(js);
    }

    public System.Threading.Tasks.Task<string> AddAsync(string js)
    {
        return base.Channel.AddAsync(js);
    }

    public double Subtract(double x, double y)
    {
        return base.Channel.Subtract(x, y);
    }

    public System.Threading.Tasks.Task<double> SubtractAsync(double x, double y)
    {
        return base.Channel.SubtractAsync(x, y);
    }

    public double Multiply(double x, double y)
    {
        return base.Channel.Multiply(x, y);
    }

    public System.Threading.Tasks.Task<double> MultiplyAsync(double x, double y)
    {
        return base.Channel.MultiplyAsync(x, y);
    }

    public double Divide(double x, double y)
    {
        return base.Channel.Divide(x, y);
    }

    public System.Threading.Tasks.Task<double> DivideAsync(double x, double y)
    {
        return base.Channel.DivideAsync(x, y);
    }

    public void UnRegist()
    {
        base.Channel.UnRegist();
    }
}